package com.yaoxun.console.xo.resp;

import com.yaoxun.console.code.BaseResponseCode;
import com.yaoxun.console.code.ResponseCode;

/**
 * 响应实体
 * 
 * @author Loren
 * @Datetime 2021年7月9日 下午2:16:00
 * @param <T>
 */
public class ApiResp<T> {

	/**
	 * 响应码
	 */
	private String code;

	/**
	 * 响应信息
	 */
	private String msg;

	/**
	 * 内容
	 */
	private T data;

	public ApiResp() {
	}

	public String getCode() {
		return code;
	}

	public ApiResp<T> setCode(String code) {
		this.code = code;
		return this;
	}

	public String getMsg() {
		return msg;
	}

	public ApiResp<T> setMsg(String msg) {
		this.msg = msg;
		return this;
	}

	public T getData() {
		return data;
	}

	public ApiResp<T> setData(T data) {
		this.data = data;
		return this;
	}

	/**
     * 成功, BaseResponseCode.SUCCESS
     * @author Loren
     * @Datetime 2021年6月17日 下午4:56:57
     * @param <T>
     * @return
     */
    public static <T> ApiResp<T> ofSuccess() {
        return of(BaseResponseCode.SUCCESS);
    }
    
    /**
     * 失败
     * @author Loren
     * @Datetime 2021年7月9日 下午2:30:40
     * @param <T>
     * @return
     */
    public static <T> ApiResp<T> ofError() {
        return of(BaseResponseCode.ERROR);
    }
    
    /**
     * 创建ApiResp
     * @author Loren
     * @Datetime 2021年7月9日 下午2:28:02
     * @param <T>
     * @param responseCode
     * @return
     */
    public static <T> ApiResp<T> of(ResponseCode responseCode) {
        return of(responseCode.code(), responseCode.msg(), null);
    }
    
    /**
     * 创建ApiResp
     * @author Loren
     * @Datetime 2021年7月9日 下午2:27:35
     * @param <T>
     * @param responseCode
     * @param data
     * @return
     */
    public static <T> ApiResp<T> of(ResponseCode responseCode, T data) {
        return of(responseCode.code(), responseCode.msg(), data);
    }
    
    /**
     * 创建ApiResp
     * @author Loren
     * @Datetime 2021年7月9日 下午2:29:20
     * @param <T>
     * @param code
     * @param msg
     * @return
     */
    public static <T> ApiResp<T> of(String code, String msg) {
        return of(code, msg, null);
    }
    
    /**
     * 创建ApiResp
     * @author Loren
     * @Datetime 2021年7月9日 下午2:26:16
     * @param <T>
     * @param code 
     * @param msg
     * @param data
     * @return
     */
    public static <T> ApiResp<T> of(String code, String msg, T data) {
        ApiResp<T> apiRo = new ApiResp<>();
        apiRo.setCode(code).setMsg(msg).setData(data);
        return apiRo;
    }
 
    /**
     * 判断当前响应是否成功
     * @author Loren
     * @Datetime 2021年11月15日 下午8:40:02
     * @return
     */
    public boolean success() {
        if(BaseResponseCode.SUCCESS.code().equals(this.code)) {
            return true;
        }
        return false;
    }
    
    /**
     * 判断当前响应是否失败
     * @author Loren
     * @Datetime 2021年11月15日 下午8:41:17
     * @return
     */
    public boolean fail() {
        return !success();
    }
    
	
}
